package com.demandbreakdown.xiyun.model.entity;

import com.baomidou.mybatisplus.annotation.*;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.time.LocalDateTime;

/**
 * 图片实体类
 *
 * @author poxz
 */
@TableName("picture")
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class Picture {
    /**
     * 图片ID
     */
    @TableId(type = IdType.AUTO)
    private Long id;

    /**
     * 上传用户ID
     */
    private Long userId;

    /**
     * 所属空间ID（NULL=公共空间）
     * 注意：使用ALWAYS策略以支持将图片移动到公共空间（设置为NULL）
     */
    @TableField(updateStrategy = FieldStrategy.ALWAYS)
    private Long spaceId;

    /**
     * 图片名称
     */
    private String pictureName;

    /**
     * 原始文件名
     */
    private String originalName;

    /**
     * 图片简介
     */
    private String introduction;

    /**
     * 图片分类
     */
    private String category;

    /**
     * 标签数组
     */
    private String tags;

    /**
     * 图片访问URL
     */
    private String fileUrl;

    /**
     * 文件存储路径
     */
    private String filePath;

    /**
     * 缩略图URL
     */
    private String thumbnailUrl;

    /**
     * 文件大小（字节）
     */
    private Long fileSize;

    /**
     * 图片宽度（像素）
     */
    private Integer picWidth;

    /**
     * 图片高度（像素）
     */
    private Integer picHeight;

    /**
     * 图片格式：jpg/png/webp等
     */
    private String picFormat;


    /**
     * 审核状态：0-待审核，1-已通过，2-已拒绝
     */
    private Integer reviewStatus;

    /**
     * 审核信息
     */
    private String reviewMessage;

    /**
     * 审核人ID
     */
    private Long reviewerId;

    /**
     * 审核时间
     */
    private LocalDateTime reviewTime;

    /**
     * 浏览次数
     */
    private Integer viewCount;

    /**
     * 下载次数
     */
    private Integer downloadCount;

    /**
     * 分享次数
     */
    private Integer shareCount;

    /**
     * 创建时间
     */
    @TableField(fill = FieldFill.INSERT)
    private LocalDateTime createTime;

    /**
     * 编辑时间
     */
    private LocalDateTime editTime;

    /**
     * 更新时间
     */
    @TableField(fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;

    /**
     * 逻辑删除：0-未删除，1-已删除
     */
    @TableLogic
    @TableField("is_delete")
    private Integer isDelete;
}